package com.yuelao.yuelao_backend.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yuelao.yuelao_backend.dto.MiningPoolDTO;
import com.yuelao.yuelao_backend.dto.MiningStatsDTO;
import com.yuelao.yuelao_backend.dto.UserMiningInfoDTO;
import com.yuelao.yuelao_backend.entity.MiningPool;

import java.math.BigDecimal;
import java.util.List;

public interface MiningService extends IService<MiningPool> {

    /**
     * 获取挖矿池列表
     * @return 挖矿池列表
     */
    List<MiningPoolDTO> getMiningPools();

    /**
     * 获取用户挖矿信息
     * @param userId 用户ID
     * @return 用户挖矿信息
     */
    UserMiningInfoDTO getUserMiningInfo(Long userId);

    /**
     * 质押到挖矿池
     * @param userId 用户ID
     * @param poolId 挖矿池ID
     * @param amount 质押金额
     * @return 是否成功
     */
    boolean stakeToPool(Long userId, Long poolId, BigDecimal amount);

    /**
     * 领取挖矿奖励
     * @param userId 用户ID
     * @param stakingId 质押记录ID
     * @return 领取奖励金额
     */
    BigDecimal claimRewards(Long userId, Long stakingId);

    /**
     * 提取质押
     * @param userId 用户ID
     * @param stakingId 质押记录ID
     * @param amount 提取金额
     * @return 提取金额
     */
    BigDecimal unstakeFromPool(Long userId, Long stakingId, BigDecimal amount);

    /**
     * 获取挖矿统计数据
     * @return 挖矿统计数据
     */
    MiningStatsDTO getMiningStats();

    /**
     * 挖矿收益计算器
     * @param poolId 挖矿池ID
     * @param amount 质押金额
     * @param duration 质押时长（天）
     * @return 预计收益
     */
    BigDecimal calculateRewards(Long poolId, BigDecimal amount, Integer duration);

    /**
     * 获取挖矿活动信息
     * @return 挖矿活动信息列表
     */
    List<String> getMiningEvents();

    /**
     * 将 MiningPool 实体转换为 MiningPoolDTO
     * @param miningPool MiningPool 实体
     * @return MiningPoolDTO
     */
    MiningPoolDTO convertToMiningPoolDTO(MiningPool miningPool);
}